#pragma once
#include <boost/noncopyable.hpp>
#include "Iterator.h"
#include "PathFwd.h"
#include "IDirectoryFwd.h"

namespace ja2{ namespace vfs
{
	//! Location interface.
	/*!
		Location interface is used to interfere with some location as real FS, or library FS and so. Each implementation must derive from it.
	*/
	class ILocation : boost::noncopyable
	{
		// Typedefs
	public:
		typedef Iterator<DirectoryPtr_t, DirectoryPtr_t> Iterator;

		// Operations
	public:
		//! Get Directory.
		virtual DirectoryPtr_t get_dir(boost::filesystem::path const &File) const = 0;
		//! Does directory exist.
		virtual bool dir_exist(boost::filesystem::path const &File) const = 0;
		//! Get path of location
		virtual boost::filesystem::path const &get_path() const = 0;
		//! Get beginning iterator.
		virtual Iterator begin() = 0;
		//! Get ending iterator.
		virtual Iterator end() = 0;
	
		// Construction/Destruction
	public:
		virtual ~ILocation() = 0 {}
	};
} /*vfs*/} /*ja2*/
